﻿/*****************************************************
**Copyright(C), 2021-2022, Ciqtek Technology.
**Version:     1.0
**Author:      hujr
**Date:        2023/10/25
**Description: 图片管理定义类
*****************************************************/

#ifndef SNAPIMGDEF_H
#define SNAPIMGDEF_H

#include "../../ofuidll_global.h"

#include <QObject>
#include <QImage>
#include <QVariant>

namespace OfUI {

	/**
	 * @brief  内部数据结构体
	 */
	struct SnapData
	{
		/** 数据项的唯一Id, 保证数据的唯一性(必须)
		 */
		int m_nId;

		/** 抓图时间(s)
		 */
		quint64 m_nSnapTime;

		/** 图片路径
		 */
		QString m_strPath;

		/** 缩略图
		 */
		QImage m_thumbnailImg;

		/** 自定义用户数据
		 */
		QVariant m_customData;

		SnapData()
		{
			m_nId = -1;
			m_nSnapTime = 0;
		};

		bool operator==(const SnapData& data)
		{
			return data.m_nId == this->m_nId;
		};
	};
	Q_DECLARE_METATYPE(SnapData)

		/**
		 * @brief  分组数据
		 */
		struct SnapDataGroup
	{
		/** 组时间戳
		 */
		quint64 m_nGroupTime;

		/** 组内数据数量
		 */
		uint m_nDataCount;

		/** 组内数据
		 */
		QList<SnapData> m_dataList;

		SnapDataGroup()
		{
			m_nGroupTime = 0;
			m_nDataCount = 0;
		};

		bool operator==(const SnapDataGroup& data)
		{
			return data.m_nGroupTime == this->m_nGroupTime;
		};
	};

	/**
	 * @brief  分组类型枚举
	 */
	enum class GroupType
	{
		DAY,      ///< 按天分组
		MONTH,    ///< 按月分组
		YEAR      ///< 按年分组
	};

	/**
	 * @brief  groupTypeFormat 分组类型时间格式化
	 * @param  eType
	 * @return QString
	 */
	OFUIDLL_EXPORT QString groupTypeFormat(const GroupType& eType);

	/**
	 * @brief  sortSnapDataByTime 图片数据排序
	 * @param  p1
	 * @param  p2
	 * @return bool
	 */
	OFUIDLL_EXPORT bool sortSnapDataByTime(const SnapData& p1, const SnapData& p2);

	/**
	 * @brief  sortSnapDataGroupByTime 组排序
	 * @param  p1
	 * @param  p2
	 * @return bool
	 */
	OFUIDLL_EXPORT bool sortSnapDataGroupByTime(const SnapDataGroup& p1, const SnapDataGroup& p2);

}

#endif // SNAPIMGDEF_H
